#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <strings.h>
#include <string.h>
#include <sys/epoll.h>
#include <vector>
#include <unistd.h>
#include "Channel.h"

class Channel;

//Epoll类
class Epoll
{
private:
    static const int MaxEvents = 100;  //epoll_wait()返回事件数组的大小
    int epollfd_ = -1;                  //epoll句柄，构造函数中赋值
    epoll_event events_[MaxEvents];    //存放epoll_wait()返回事件的数组
public:
    Epoll();        //构造函数中创建epoll
    ~Epoll();       //析构函数中关闭epoll


    void updatechannel(Channel* ch);                        //把Channel类添加/更新到红黑树，channel类中有fd，也有需要监视的事件
    void removeChannel(Channel* ch);                        //把channel从红黑树删除
    std::vector<Channel*> loop(int timeout = -1);             //运行epoll_wait(),等待的事件的发生，返回已发生的事件
};